/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package elaborate.h2x.transform.position;

import elaborate.h2x.transform.TransformingNodeId;
import java.util.List;

/**
 * PositionMap records future position information of
 * transforming nodes.
 * @author lendle
 */
public interface PositionMap {
    /**
     * only nodes included in result and has as_root annotation
     * will be returned as roots
     * @return
     */
    public List<TransformingNodeId> getRoots();
    public List<TransformingNodeId> getOrderedChildList(TransformingNodeId nodeId);
    public TransformingNodeId getParentNode(TransformingNodeId nodeId);
    public TransformingNodeId getPreviousSibling(TransformingNodeId nodeId);
    public TransformingNodeId getNextSibling(TransformingNodeId nodeId);
    public PositionSlot getPositionSlot(TransformingNodeId nodeId);
    public PositionSlot positionNode(TransformingNodeId parentNode, TransformingNodeId previousSibling, TransformingNodeId node) throws Exception;
}
